#include <iostream>
using namespace std;
#include <string>
#include <list>

// list容器 排序案例 对于自定义数据类型 做排序

// 按照年龄进行升序，如果年龄相同按照身高进行降序

class Person
{
public:
    string name;    //姓名
    int age;        //年龄
    int height;     //身高

    Person(string name, int age, int height)
    {
        this->name = name;
        this->age = age;
        this->height = height;
    }
};

// 指定排序规则
bool comparePerson(Person& p1, Person& p2)
{
    //按照年龄 升序
    if (p1.age == p2.age)
        //年龄相同 按照身高降序
        return p1.height > p2.height;
    else
        return p1.age < p2.age;
}

void test1()
{
    list<Person>L;//创建容器

    // 准备数据
    Person p1("刘备", 35, 175);
    Person p2("曹操", 45, 180);
    Person p3("孙权", 40, 170);
    Person p4("赵云", 25, 190);
    Person p5("张飞", 35, 160);
    Person p6("关羽", 35, 200);

    // 插入数据
    L.push_back(p1);
    L.push_back(p2);
    L.push_back(p3);
    L.push_back(p4);
    L.push_back(p5);
    L.push_back(p6);

    cout << "排序前：" << endl;
    for (list<Person>::iterator it = L.begin();it != L.end();it++)
    {
        cout << "姓名：" << (*it).name << "  年龄："
            << (*it).age << "  身高：" << (*it).height << endl;
    }

    // 排序
    cout << "---------------------------------" << endl;
    cout << "排序后：" << endl;
    L.sort(comparePerson);
    for (list<Person>::iterator it = L.begin();it != L.end();it++)
    {
        cout << "姓名：" << (*it).name << "  年龄："
            << (*it).age << "  身高：" << (*it).height << endl;
    }
}
int main()
{
    test1();
    return 0;
}